home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
GameKit
/
gamekit-1
/
GKCollisionGroup.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
1KB
|
52 lines
#import <gamekit/gamekit.h>
@implementation GKCollisionGroup
- init
{
id ret = [super init];
actorLists[0] = [[List alloc] init];
actorLists[1] = [[List alloc] init];
collisionDetector = [GKCollider new];
delegate = nil;
return ret;
}
- (int)tag { return tag; }
- setTag:(int)anInt { tag = anInt; return self; }
- addActor:anActor toList:(int)number
{
return [actorLists[number] addObjectIfAbsent:anActor];
}
- removeActor:anActor fromList:(int)number
{
return [actorLists[number] removeObject:anActor];
}
- delegate { return delegate; }
- setDelegate:anObject { delegate = anObject; return self; }
- calculateCollisions:sender
{ // This algorithm is n*m (i.e. n^2) so don't make both lists large!!!
int i, j;
for (i=0; i<[actorLists[0] count]; i++) {
id actor1 = [actorLists[0] objectAt:i];
for (j=0; j<[actorLists[1] count]; j++) {
id actor2 = [actorLists[1] objectAt:j];
if ([collisionDetector object:actor1 collidesWith:actor2]) {
// notify the actors...
[actor1 collidedWith:actor2];
[actor2 collidedWith:actor1];
if ([delegate respondsTo:@selector(actor:collidedWith:)])
[delegate actor:actor1 collidedWith:actor2];
}
}
}
return self;
}
@end